package java2021_9_23;
//图书管理系统.
//        一.梳理需求需求(功能点):
//        1.能够表示书籍信息.针对每本书来说,序号，书名,作者,价格,类型.⒉能够表示用户信息.普通用户,管理员
//        3.支持的操作:
//        对于普通用户:查看书籍列表,查找指定的书籍,借书,还书.对于管理员:查看书籍列表,新增书籍,删除书籍.
//        二.准备好数据库
//        创建好需要的表。
//        书籍表，用户表
//        三,构造和数据库相关的实体类
//          数据库里实体:用户,书籍.
//          就需要在java代码里，也有对应的两个类。来描述一个用户和一本书的情况
//        四,封装数据库的相关操作
//        写一些JDBC相关的代码,通过这些代码,来完成对应数据表的增删改查
//        1,先把数据库建立连接的操作,单独封装好.
//        2,再把针对数据表的增删改查,封装好
//        3,再把针对用户表的增删改查,封装好
/**
 * 完成了数据库的设计
 *
 * 创建了两个表.book,user
 *
 * 创建了两个实体类.Book,User
 *
 * 创建了DBUtil来封装了数据库建立连接的相关操作
 *
 * 创建了BookDao来封装针对Book表的增删改查
 */

import user.User;
import user.UserDao;

import java.util.Scanner;

/**
 * 实际开发中,我们希望最好能把建表的SQL留下来
 * 后面如果要重新在另外一个地方部署数据库,那就很方便了.
 * 我们通常会使用一个.sql文件来保存(一个文件的后缀名,没有啥特别的含义,很多时候都是人们约定的)
 *
 * 如何让db.sql里的代码被执行?
 * 直接复制粘贴,到mysql的终端中即可~
 */
public class Main {
    //编写代码的主体逻辑

    public static void main(String[] args) {
//        通过login方法实现用户登录逻辑
        User user = login();//login()方法返回一个对应的对象,管理员或者普通用户
        while(true){
            int choice = user.menu();//执行对应的菜单,让用户进行选择
            user.doOperation(choice);//根据用户的选项,来执行对应的操作
        }
    }
    private static User login(){
        //实现用户登录逻辑
        //1.让用户输入用户名和密码
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名:>");
        String userName = scanner.next();
        System.out.println("请输入密码");
        String passWord = scanner.next();
        //2.从数据库根据用户名来查询密码
        UserDao userDao = new UserDao();
        User user = userDao.selectName(userName);//这个方法,会根据名字来查找数据库里是否有这个名字的对应属性.
        // 并根据是否为管理员返回对应的user对象,将对应数据存放到user对象中去,
        if(user == null){
            //用户不存在
            System.out.println("无此用户,登录失败!");
            //退出程序
            System.exit(0);
        }else{
            if(!passWord.equals(user.getPassword())){
                System.out.println("密码错误!");
                System.exit(0);
            }
        }
        return user;
    }
}
